﻿/********************************************************************************
** @ Date:2024/09/18
** @ Author: AoZhiQiang
** @ Description: 磅单打印程序主页面
** @ Version:1.0.0
** @ Fun:
********************************************************************************/
#ifndef PoundListPrint_H
#define PoundListPrint_H

#include <QtWidgets/QMainWindow>
#include "ui_PoundListPrint.h"
#include "CMyTableView.h"

//进出厂记录数据
struct SRecordData
{
	QString sRecordId;        //记录Id
	QString sTickNo;          //货票号
	QString sCarCode;         //车牌号
	QString sVendor;          //供应商
	QString sCarrierName;     //供货单位
	bool bToPrint;            //供应商是否可以打印
	QString sRecordTime;      //进厂时间
	QString sLeaveTime;       //出厂时间
	QString sCZTime;          //称重时间
	QString sJQTime;          //检轻时间
	QString sASHType;		  //品种
	QString sViewCard;        //可视卡号
	double dMZQTY;            //毛重
	double dPZQTY;            //皮重
	double dNETQTY;           //净重
	bool bIsPrint;            //是否已经打印
	SRecordData()
	{
		sRecordId = "";        //记录Id
		sTickNo = "";          //货票号
		sCarCode = "";         //车牌号
		sVendor = "";          //供应商
		sCarrierName = "";     //供货单位
		bToPrint = true;       //供应商是否可以打印
		sRecordTime = "";      //进厂时间
		sLeaveTime = "";       //出厂时间
		sCZTime = "";		   //称重时间
		sJQTime = "";          //检轻时间
		sASHType = "";		   //品种
		sViewCard = "";        //可视卡号
		dMZQTY = 0.0;          //毛重
		dPZQTY = 0.0;          //皮重
		dNETQTY = 0.0;         //净重
		bIsPrint = false;      //是否已经打印
	}
};

//过磅打印机
typedef bool(__stdcall*lpPrintLabel)(char*, char*);
typedef int(__stdcall*lpSetPrintConfig)(char*, int, char*);

class PoundListPrint : public QMainWindow
{
    Q_OBJECT

public:
    PoundListPrint(QWidget *parent = nullptr);
    ~PoundListPrint();

protected:
	/**
	* @brief showEvent 页面显示时触发
	* @param event 页面显示事件对象
	*/
	void showEvent(QShowEvent * event);

private:
	void initUI();
	void initData();
	void initPrintDLL();        //初始化打印驱动
	void initTableView();
	void refreshTableViewUI();  //刷新表格UI
	void setStyleSheetFile();   //设置样式文件
	void loadData();            //加载数据
	bool judgeError();          //输入参数合法性校验
	bool getRecordData();       //从数据库获取记录数据
	void createPrintFormat(QList<QStringList>& dlistToPrint, SRecordData stRecordData);   //创建打印格式
	void printRecord(QString sRecordId);   //打印记录数据

	/*打印机相关接口*/
	lpPrintLabel m_lpPrintLabel;
	lpSetPrintConfig m_lpSetPrintConfig;

private slots:

	/**
	* @brief slotGetSelectedRow 获得选中行号
	* @param
	*/
	void slotGetSelectedRow(const QModelIndex &index);

	/**
	* @brief slotSelectRecord 查询记录
	* @param
	*/
	void slotSelectRecord();

	/**
	* @brief slotPrintPoundList 打印磅单
	* @param
	*/
	void slotPrintPoundList();

private:
    Ui::PoundListPrintClass ui;
	QMyTableView* m_pTableView;                                   //自定义表格控件
	int m_nTimeType;                                              //时间类型 0-入厂时间 1-出厂时间
	QMap<QString, SRecordData> m_mapRecordData;                   //记录数据集合
	QDateTime m_qStartTime;                                       //起始时间
	QDateTime m_qEndTime;                                         //结束时间
	QString m_sCarOrCargoCode;                                    //车牌号/货票号  根据长度判断  小于10为车牌号
	QString m_sViewCardCode;                                      //可视卡号
	/*打印机参数*/
	QString m_sPrintTitle;                                        //打印标题
	int m_nPrintNum;                                              //打印张数
	bool m_bPrintDLL;                                             //驱动是否加载成功
};

#endif